package com.zpark.convert;

import com.zpark.dto.PersonDto;
import com.zpark.dto.UserDto;
import com.zpark.entity.User;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 对象转换接口类
 *  在接口当中定义转换方法，实现对象之间的转换
 *  语法：
 *      T methodName(ars)
 *      解释：
 *          T：转换的类型
 *          ars：被转换的类型
 *          methodName：方法名字的要求，arsToT
 */
@Mapper
public interface UserConvert {

    // 声明转换对象的实例
    UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);

    // 将User对象转为UserDto对象
    UserDto userToUserDto(User user);

    // 将UserDto转化为User对象
    User userDtoToUser(UserDto dto);

    // 将List<User>转为List<UserDto>
    List<UserDto> ltUserToLtDto(List<User> users);

    // 将User转为PersonDto
    @Mappings({
            @Mapping(source = "username", target = "uname"),
            @Mapping(source = "password", target = "pwd")
    })
    PersonDto userToPersonDto(User user);

    // 将PersonDto转为User
    @Mappings({
            // source: 源字段名字   target：目标字段名字
            @Mapping(source = "uname", target = "username"),
            @Mapping(source = "pwd", target = "password")
    })
    User personDtoToUser(PersonDto dto);
}
